﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using RRTWSEntityDSD.Dominio;
using System.ServiceModel.Web;

namespace RRTWSEntityDSD.ServiceEntidad.WFCServiceREST
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de interfaz "IWCFAsientosService" en el código y en el archivo de configuración a la vez.
    [ServiceContract]
    public interface IWCFAsientosService
    {
        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "Asientos", ResponseFormat = WebMessageFormat.Json)]
        Asiento CrearAsiento(Asiento estadoACrear);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos/{codigo}", ResponseFormat = WebMessageFormat.Json)]
        Asiento ObtenerAsiento(string codigo);

        [OperationContract]
        [WebInvoke(Method = "PUT", UriTemplate = "Asientos", ResponseFormat = WebMessageFormat.Json)]
        Asiento ModificarAsiento(Asiento estadoAModificar);

        [OperationContract]
        [WebInvoke(Method = "DELETE", UriTemplate = "Asientos/{codigo}", ResponseFormat = WebMessageFormat.Json)]
        void EliminarAsiento(string codigo);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos", ResponseFormat = WebMessageFormat.Json)]
        List<Asiento> ListarAsientos();

        //Mas
        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos/Eventos/{codigo}/{evento}", ResponseFormat = WebMessageFormat.Json)]
        Asiento getAsientoDisponiblePorEvento(string codigo, string evento);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos/Eventos/Disponibles/{evento}", ResponseFormat = WebMessageFormat.Json)]
        List<Asiento> getListaAsientoDisponiblePorEvento(string evento);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos/Estadios/{codigo}", ResponseFormat = WebMessageFormat.Json)]
        List<Asiento> listarAsientosPorEstadio(string codigo);

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos/Eventos/{codigo}", ResponseFormat = WebMessageFormat.Json)]
        List<Asiento> listarAsientosPorEvento(string codigo);
        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Asientos/Cliente/{cliente}/Evento/{evento}/Pago/{pago}", ResponseFormat = WebMessageFormat.Json)]
        List<Asiento> listarAsientosPorClientePorEvento(string cliente, string evento, string pago);
    }   
}
